#include <cstdio>
#include <cstring>

int n, m, c[ 111 ][ 111 ][ 111 ];

int lowbit( int t )
{
    return t & ( t ^ ( t - 1 ) );
}

void add( int x, int y, int z )
{
    int ty, tz;
    if ( x == 0 || y == 0 || z == 0 )
        return ;
    while ( x <= 101 )
    {
        ty = y;
        while ( ty <= 101 )
        {
            tz = z;
            while ( tz <= 101 )
            {
                c[ x ][ ty ][ tz ] ^= 1;
                tz += lowbit( tz );
            }
            ty += lowbit( ty );
        }
        x += lowbit( x );
    }
}

int query( int x, int y, int z )
{
    int ty, tz, ret = 0;
    while ( x > 0 )
    {
        ty = y;
        while ( ty > 0 )
        {
            tz = z;
            while ( tz > 0 )
            {
                ret = ( ret + c[ x ][ ty ][ tz ] ) & 1;
                tz -= lowbit( tz );
            }
            ty -= lowbit( ty );
        }
        x -= lowbit( x );
    }
    return ret;
}

void work( )
{
    int i, X, x1, y1, z1, x2, y2, z2, ret, t;
    memset( c, 0, sizeof( c ) );
    while ( m-- )
    {
        scanf("%d", &X);
        if ( X )
        {
            scanf("%d%d%d%d%d%d", &x1, &y1, &z1, &x2, &y2, &z2);
            add( x1, y1, z1 );
            add( x1, y1, z2 + 1 );
            add( x1, y2 + 1, z1 );
            add( x1, y2 + 1, z2 + 1 );
            add( x2 + 1, y1, z1 );
            add( x2 + 1, y1, z2 + 1 );
            add( x2 + 1, y2 + 1, z1 );
            add( x2 + 1, y2 + 1, z2 + 1 );
        }
        else
        {
            scanf("%d%d%d", &x1, &y1, &z1);
            printf("%d\n", query( x1, y1, z1 ));
        }
    }
}

int main( )
{
    while ( scanf("%d%d", &n, &m) != EOF )
        work( );
    return 0;
}
